Desarrollo del laboratorio

# Import packages
library(nycflights13)
library(dplyr)
library(ggplot2)
library(tidyr)

# Explore datasets
view(flights)
view(airports)
view(planes)
view(airlines)
view(weather)

1. Inner-join

1.1. Conecte flights con planes

flights_planes <- inner_join(flights, planes, by = "tailnum", suffix = c("_flights", "_planes"))

flights_planes

1.2. Conecte flights con airlines

flights_airlines <- inner_join(flights, airlines, by = "carrier", suffix = c("_flights", "_airlines"))

flights_airlines

1.3. Conecte flights con airports

flights_airports <- inner_join(flights, airports, by = c("dest" = "faa"), suffix = c("_origin", "_destination"))
flights_airports <- inner_join(flights_airports, airports, by = c("origin" = "faa"), suffix = c("_origin", "_origen"))

flights_airports

1.4. Conecte flights con weather

flights_weather <- inner_join(flights, weather, by = c("year", "month", "day", "hour", "origin"), suffix = c("_flights", "_weather"))

flights_weather

Data manipulation

2.1. Utilice el verbo count en flights y envíe como parámetro las variables year, month, day. Luego filtre n para que sea mayor a 1000. Por último ordene n con el verbo arrange y devuelva el resultado.

flights_count <- flights %>% 
  count(year, month, day)

flights_count

flights_count <- flights_count %>% 
  filter(n > 1000) %>% 
  arrange(desc(n))

flights_count

2.2. Utilice el concepto de selección por rango (aplicando el operador “:”) para obtener las variables year hacia day. También agregue a esta selección hour, origin, dest, tailnum, carrier, arr_delay, dep_delay, por último almacene el resultado en la variable flights_selected.

flights_selected <- flights %>% 
  select(year:day, hour, origin, dest, tailnum, carrier, arr_delay, dep_delay)

flights_selected

2.3. Utilice left_join para combinar airlines y flights_selected. Al obtener el resultado, utilice el verbo select para eliminar las columnas origin y dest (utilice el operador “-” para descartar estas columnas únicamente). Por último agregue una nueva columna con el verbo mutate, asigne el nombre tot_delay y opere la suma de arr_delay y dep_delay.

airlines_flights_selected <- left_join(airlines, flights_selected, by = "carrier") %>%
  select(-c(origin, dest)) %>%
  mutate(tot_delay = arr_delay + dep_delay)
Warning: Each row in `x` is expected to match at most 1 row in `y`.
airlines_flights_selected

2.4. Utilice inner_join para combinar flights y weather, luego agrupe por la variable precip. Utilice summarize para encontrar el promedio de la variable dep_delay (aplicando la función mean), asigne al promedio el nombre delay. Al utilizar la función mean agregue el parámetro na.rm y asígnele TRUE por defecto. Luego agregue la función replace_na y aplíquelo a la variable delay sustituyendo NA por cero. Por último almacene el resultado en la variable precip_delay.

precip_delay <- inner_join(flights, weather, by = c("year", "month", "day", "hour", "origin"), suffix = c("_flights", "_weather")) %>%
  group_by(precip) %>%
  summarize(delay = mean(dep_delay, na.rm = TRUE)) %>%
  replace_na(list(delay = 0))

precip_delay

2.5. Utilice la variable precip_delay para crear un gráfico de puntos tomando de eje x la variable precip y para y la variable delay.

ggplot(precip_delay, aes(x = precip, y = delay)) +
  geom_point() +
  labs(x = "Precip", y = "Delay") +
  ggtitle("Precip delay")

2.6. Utilice fligths y aplique filter tomando en cuenta la siguiente condición: Que year sea igual a 2013, que month sea igual a 5 y que day sea igual a 10. Luego agrupe por la variable dest. Después utilice summarize para obtener el promedio de la variable arr_delay, establezca el parámetro na.rm en TRUE y asigne al promedio el nombre de delay. Conecte el resultado anterior por medio de inner_join a la tabla airports y asignelo a la variable flights_airports.

flights_airports <- flights %>%
  filter(year == 2013 & month == 5 & day == 10) %>%
  group_by(dest) %>%
  summarize(delay = mean(arr_delay, na.rm = TRUE))

flights_airports

flights_airports <- flights_airports %>%
  inner_join(airports, by = c("dest" = "faa"))
  
flights_airports

2.7. Utilice la variable flights_airports para crear un gráfico de puntos tomando de eje x la variable lon y para y la variable lat. Defina el color y el tamaño por medio de la variable delay. El tamaño se establece por medio del parámetro size.

ggplot(flights_airports, aes(x = lon, y = lat, color = delay, size = delay)) +
  geom_point() +
  labs(x = "Longitude", y = "Latitude") +
  ggtitle("Flights by airports")

2.8. Utilice inner_join para combinar flights y planes. Agregue los sufijos _flights y _planes respectivamente. Por último utilice la función transmute para seleccionar las variables tailnum y manufacturer, pero además agregue la variable pi que almacene la suma de dep_delay y arr_delay, yluego divida por air_time.

flights_planes_transmuted <- inner_join(flights, planes, by = "tailnum", suffix = c("_flights", "_planes")) %>%
  transmute(tailnum, manufacturer, pi = (dep_delay + arr_delay) / air_time)

flights_planes_transmuted
LS0tCnRpdGxlOiAiUHLDoWN0aWNhIDIiCm91dHB1dDogaHRtbF9ub3RlYm9vawotLS0KIyMgRGVzYXJyb2xsbyBkZWwgbGFib3JhdG9yaW8KYGBge3J9CiMgSW1wb3J0IHBhY2thZ2VzCmxpYnJhcnkobnljZmxpZ2h0czEzKQpsaWJyYXJ5KGRwbHlyKQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkodGlkeXIpCgojIEV4cGxvcmUgZGF0YXNldHMKdmlldyhmbGlnaHRzKQp2aWV3KGFpcnBvcnRzKQp2aWV3KHBsYW5lcykKdmlldyhhaXJsaW5lcykKdmlldyh3ZWF0aGVyKQpgYGAKCiMjIDEuIElubmVyLWpvaW4KCiMjIyAxLjEuIENvbmVjdGUgZmxpZ2h0cyBjb24gcGxhbmVzCmBgYHtyfQpmbGlnaHRzX3BsYW5lcyA8LSBpbm5lcl9qb2luKGZsaWdodHMsIHBsYW5lcywgYnkgPSAidGFpbG51bSIsIHN1ZmZpeCA9IGMoIl9mbGlnaHRzIiwgIl9wbGFuZXMiKSkKCmZsaWdodHNfcGxhbmVzCmBgYAojIyMgMS4yLiBDb25lY3RlIGZsaWdodHMgY29uIGFpcmxpbmVzCmBgYHtyfQpmbGlnaHRzX2FpcmxpbmVzIDwtIGlubmVyX2pvaW4oZmxpZ2h0cywgYWlybGluZXMsIGJ5ID0gImNhcnJpZXIiLCBzdWZmaXggPSBjKCJfZmxpZ2h0cyIsICJfYWlybGluZXMiKSkKCmZsaWdodHNfYWlybGluZXMKYGBgCiMjIyAxLjMuIENvbmVjdGUgZmxpZ2h0cyBjb24gYWlycG9ydHMKYGBge3J9CmZsaWdodHNfYWlycG9ydHMgPC0gaW5uZXJfam9pbihmbGlnaHRzLCBhaXJwb3J0cywgYnkgPSBjKCJkZXN0IiA9ICJmYWEiKSwgc3VmZml4ID0gYygiX29yaWdpbiIsICJfZGVzdGluYXRpb24iKSkKZmxpZ2h0c19haXJwb3J0cyA8LSBpbm5lcl9qb2luKGZsaWdodHNfYWlycG9ydHMsIGFpcnBvcnRzLCBieSA9IGMoIm9yaWdpbiIgPSAiZmFhIiksIHN1ZmZpeCA9IGMoIl9vcmlnaW4iLCAiX29yaWdlbiIpKQoKZmxpZ2h0c19haXJwb3J0cwpgYGAKIyMjIDEuNC4gQ29uZWN0ZSBmbGlnaHRzIGNvbiB3ZWF0aGVyCmBgYHtyfQpmbGlnaHRzX3dlYXRoZXIgPC0gaW5uZXJfam9pbihmbGlnaHRzLCB3ZWF0aGVyLCBieSA9IGMoInllYXIiLCAibW9udGgiLCAiZGF5IiwgImhvdXIiLCAib3JpZ2luIiksIHN1ZmZpeCA9IGMoIl9mbGlnaHRzIiwgIl93ZWF0aGVyIikpCgpmbGlnaHRzX3dlYXRoZXIKYGBgCiMjIERhdGEgbWFuaXB1bGF0aW9uCgojIyMgMi4xLiBVdGlsaWNlIGVsIHZlcmJvIGNvdW50IGVuIGZsaWdodHMgeSBlbnbDrWUgY29tbyBwYXLDoW1ldHJvIGxhcyB2YXJpYWJsZXMgeWVhciwgbW9udGgsIGRheS4gTHVlZ28gZmlsdHJlIG4gcGFyYSBxdWUgc2VhIG1heW9yIGEgMTAwMC4gUG9yIMO6bHRpbW8gb3JkZW5lIG4gY29uIGVsIHZlcmJvIGFycmFuZ2UgeSBkZXZ1ZWx2YSBlbCByZXN1bHRhZG8uCmBgYHtyfQpmbGlnaHRzX2NvdW50IDwtIGZsaWdodHMgJT4lIAogIGNvdW50KHllYXIsIG1vbnRoLCBkYXkpCgpmbGlnaHRzX2NvdW50CgpmbGlnaHRzX2NvdW50IDwtIGZsaWdodHNfY291bnQgJT4lIAogIGZpbHRlcihuID4gMTAwMCkgJT4lIAogIGFycmFuZ2UoZGVzYyhuKSkKCmZsaWdodHNfY291bnQKYGBgCiMjIyAyLjIuIFV0aWxpY2UgZWwgY29uY2VwdG8gZGUgc2VsZWNjacOzbiBwb3IgcmFuZ28gKGFwbGljYW5kbyBlbCBvcGVyYWRvciDigJw64oCdKSBwYXJhIG9idGVuZXIgbGFzIHZhcmlhYmxlcyB5ZWFyIGhhY2lhIGRheS4gVGFtYmnDqW4gYWdyZWd1ZSBhIGVzdGEgc2VsZWNjacOzbiBob3VyLCBvcmlnaW4sIGRlc3QsIHRhaWxudW0sIGNhcnJpZXIsIGFycl9kZWxheSwgZGVwX2RlbGF5LCBwb3Igw7psdGltbyBhbG1hY2VuZSBlbCByZXN1bHRhZG8gZW4gbGEgdmFyaWFibGUgZmxpZ2h0c19zZWxlY3RlZC4KYGBge3J9CmZsaWdodHNfc2VsZWN0ZWQgPC0gZmxpZ2h0cyAlPiUgCiAgc2VsZWN0KHllYXI6ZGF5LCBob3VyLCBvcmlnaW4sIGRlc3QsIHRhaWxudW0sIGNhcnJpZXIsIGFycl9kZWxheSwgZGVwX2RlbGF5KQoKZmxpZ2h0c19zZWxlY3RlZApgYGAKIyMjIDIuMy4gVXRpbGljZSBsZWZ0X2pvaW4gcGFyYSBjb21iaW5hciBhaXJsaW5lcyB5IGZsaWdodHNfc2VsZWN0ZWQuIEFsIG9idGVuZXIgZWwgcmVzdWx0YWRvLCB1dGlsaWNlIGVsIHZlcmJvIHNlbGVjdCBwYXJhIGVsaW1pbmFyIGxhcyBjb2x1bW5hcyBvcmlnaW4geSBkZXN0ICh1dGlsaWNlIGVsIG9wZXJhZG9yIOKAnC3igJ0gcGFyYSBkZXNjYXJ0YXIgZXN0YXMgY29sdW1uYXMgw7puaWNhbWVudGUpLiBQb3Igw7psdGltbyBhZ3JlZ3VlIHVuYSBudWV2YSBjb2x1bW5hIGNvbiBlbCB2ZXJibyBtdXRhdGUsIGFzaWduZSBlbCBub21icmUgdG90X2RlbGF5IHkgb3BlcmUgbGEgc3VtYSBkZSBhcnJfZGVsYXkgeSBkZXBfZGVsYXkuCmBgYHtyfQphaXJsaW5lc19mbGlnaHRzX3NlbGVjdGVkIDwtIGxlZnRfam9pbihhaXJsaW5lcywgZmxpZ2h0c19zZWxlY3RlZCwgYnkgPSAiY2FycmllciIpICU+JQogIHNlbGVjdCgtYyhvcmlnaW4sIGRlc3QpKSAlPiUKICBtdXRhdGUodG90X2RlbGF5ID0gYXJyX2RlbGF5ICsgZGVwX2RlbGF5KQoKYWlybGluZXNfZmxpZ2h0c19zZWxlY3RlZApgYGAKIyMjIDIuNC4gVXRpbGljZSBpbm5lcl9qb2luIHBhcmEgY29tYmluYXIgZmxpZ2h0cyB5IHdlYXRoZXIsIGx1ZWdvIGFncnVwZSBwb3IgbGEgdmFyaWFibGUgcHJlY2lwLiBVdGlsaWNlIHN1bW1hcml6ZSBwYXJhIGVuY29udHJhciBlbCBwcm9tZWRpbyBkZSBsYSB2YXJpYWJsZSBkZXBfZGVsYXkgKGFwbGljYW5kbyBsYSBmdW5jacOzbiBtZWFuKSwgYXNpZ25lIGFsIHByb21lZGlvIGVsIG5vbWJyZSBkZWxheS4gQWwgdXRpbGl6YXIgbGEgZnVuY2nDs24gbWVhbiBhZ3JlZ3VlIGVsIHBhcsOhbWV0cm8gbmEucm0geSBhc8OtZ25lbGUgVFJVRSBwb3IgZGVmZWN0by4gTHVlZ28gYWdyZWd1ZSBsYSBmdW5jacOzbiByZXBsYWNlX25hIHkgYXBsw61xdWVsbyBhIGxhIHZhcmlhYmxlIGRlbGF5IHN1c3RpdHV5ZW5kbyBOQSBwb3IgY2Vyby4gUG9yIMO6bHRpbW8gYWxtYWNlbmUgZWwgcmVzdWx0YWRvIGVuIGxhIHZhcmlhYmxlIHByZWNpcF9kZWxheS4KYGBge3J9CnByZWNpcF9kZWxheSA8LSBpbm5lcl9qb2luKGZsaWdodHMsIHdlYXRoZXIsIGJ5ID0gYygieWVhciIsICJtb250aCIsICJkYXkiLCAiaG91ciIsICJvcmlnaW4iKSwgc3VmZml4ID0gYygiX2ZsaWdodHMiLCAiX3dlYXRoZXIiKSkgJT4lCiAgZ3JvdXBfYnkocHJlY2lwKSAlPiUKICBzdW1tYXJpemUoZGVsYXkgPSBtZWFuKGRlcF9kZWxheSwgbmEucm0gPSBUUlVFKSkgJT4lCiAgcmVwbGFjZV9uYShsaXN0KGRlbGF5ID0gMCkpCgpwcmVjaXBfZGVsYXkKYGBgCiMjIyAyLjUuIFV0aWxpY2UgbGEgdmFyaWFibGUgcHJlY2lwX2RlbGF5IHBhcmEgY3JlYXIgdW4gZ3LDoWZpY28gZGUgcHVudG9zIHRvbWFuZG8gZGUgZWplIHggbGEgdmFyaWFibGUgcHJlY2lwIHkgcGFyYSB5IGxhIHZhcmlhYmxlIGRlbGF5LgpgYGB7cn0KZ2dwbG90KHByZWNpcF9kZWxheSwgYWVzKHggPSBwcmVjaXAsIHkgPSBkZWxheSkpICsKICBnZW9tX3BvaW50KCkgKwogIGxhYnMoeCA9ICJQcmVjaXAiLCB5ID0gIkRlbGF5IikgKwogIGdndGl0bGUoIlByZWNpcCBkZWxheSIpCmBgYAojIyMgMi42LiBVdGlsaWNlIGZsaWd0aHMgeSBhcGxpcXVlIGZpbHRlciB0b21hbmRvIGVuIGN1ZW50YSBsYSBzaWd1aWVudGUgY29uZGljacOzbjogUXVlIHllYXIgc2VhIGlndWFsIGEgMjAxMywgcXVlIG1vbnRoIHNlYSBpZ3VhbCBhIDUgeSBxdWUgZGF5IHNlYSBpZ3VhbCBhIDEwLiBMdWVnbyBhZ3J1cGUgcG9yIGxhIHZhcmlhYmxlIGRlc3QuIERlc3B1w6lzIHV0aWxpY2Ugc3VtbWFyaXplIHBhcmEgb2J0ZW5lciBlbCBwcm9tZWRpbyBkZSBsYSB2YXJpYWJsZSBhcnJfZGVsYXksIGVzdGFibGV6Y2EgZWwgcGFyw6FtZXRybyBuYS5ybSBlbiBUUlVFIHkgYXNpZ25lIGFsIHByb21lZGlvIGVsIG5vbWJyZSBkZSBkZWxheS4gQ29uZWN0ZSBlbCByZXN1bHRhZG8gYW50ZXJpb3IgcG9yIG1lZGlvIGRlIGlubmVyX2pvaW4gYSBsYSB0YWJsYSBhaXJwb3J0cyB5IGFzaWduZWxvIGEgbGEgdmFyaWFibGUgZmxpZ2h0c19haXJwb3J0cy4KYGBge3J9CmZsaWdodHNfYWlycG9ydHMgPC0gZmxpZ2h0cyAlPiUKICBmaWx0ZXIoeWVhciA9PSAyMDEzICYgbW9udGggPT0gNSAmIGRheSA9PSAxMCkgJT4lCiAgZ3JvdXBfYnkoZGVzdCkgJT4lCiAgc3VtbWFyaXplKGRlbGF5ID0gbWVhbihhcnJfZGVsYXksIG5hLnJtID0gVFJVRSkpCgpmbGlnaHRzX2FpcnBvcnRzCgpmbGlnaHRzX2FpcnBvcnRzIDwtIGZsaWdodHNfYWlycG9ydHMgJT4lCiAgaW5uZXJfam9pbihhaXJwb3J0cywgYnkgPSBjKCJkZXN0IiA9ICJmYWEiKSkKICAKZmxpZ2h0c19haXJwb3J0cwpgYGAKIyMjIDIuNy4gVXRpbGljZSBsYSB2YXJpYWJsZSBmbGlnaHRzX2FpcnBvcnRzIHBhcmEgY3JlYXIgdW4gZ3LDoWZpY28gZGUgcHVudG9zIHRvbWFuZG8gZGUgZWplIHggbGEgdmFyaWFibGUgbG9uIHkgcGFyYSB5IGxhIHZhcmlhYmxlIGxhdC4gRGVmaW5hIGVsIGNvbG9yIHkgZWwgdGFtYcOxbyBwb3IgbWVkaW8gZGUgbGEgdmFyaWFibGUgZGVsYXkuIEVsIHRhbWHDsW8gc2UgZXN0YWJsZWNlIHBvciBtZWRpbyBkZWwgcGFyw6FtZXRybyBzaXplLgpgYGB7cn0KZ2dwbG90KGZsaWdodHNfYWlycG9ydHMsIGFlcyh4ID0gbG9uLCB5ID0gbGF0LCBjb2xvciA9IGRlbGF5LCBzaXplID0gZGVsYXkpKSArCiAgZ2VvbV9wb2ludCgpICsKICBsYWJzKHggPSAiTG9uZ2l0dWRlIiwgeSA9ICJMYXRpdHVkZSIpICsKICBnZ3RpdGxlKCJGbGlnaHRzIGJ5IGFpcnBvcnRzIikKYGBgCiMjIyAyLjguIFV0aWxpY2UgaW5uZXJfam9pbiBwYXJhIGNvbWJpbmFyIGZsaWdodHMgeSBwbGFuZXMuIEFncmVndWUgbG9zIHN1Zmlqb3MgX2ZsaWdodHMgeSBfcGxhbmVzIHJlc3BlY3RpdmFtZW50ZS4gUG9yIMO6bHRpbW8gdXRpbGljZSBsYSBmdW5jacOzbiB0cmFuc211dGUgcGFyYSBzZWxlY2Npb25hciBsYXMgdmFyaWFibGVzIHRhaWxudW0geSBtYW51ZmFjdHVyZXIsIHBlcm8gYWRlbcOhcyBhZ3JlZ3VlIGxhIHZhcmlhYmxlIHBpIHF1ZSBhbG1hY2VuZSBsYSBzdW1hIGRlIGRlcF9kZWxheSB5IGFycl9kZWxheSwgeWx1ZWdvIGRpdmlkYSBwb3IgYWlyX3RpbWUuCmBgYHtyfQpmbGlnaHRzX3BsYW5lc190cmFuc211dGVkIDwtIGlubmVyX2pvaW4oZmxpZ2h0cywgcGxhbmVzLCBieSA9ICJ0YWlsbnVtIiwgc3VmZml4ID0gYygiX2ZsaWdodHMiLCAiX3BsYW5lcyIpKSAlPiUKICB0cmFuc211dGUodGFpbG51bSwgbWFudWZhY3R1cmVyLCBwaSA9IChkZXBfZGVsYXkgKyBhcnJfZGVsYXkpIC8gYWlyX3RpbWUpCgpmbGlnaHRzX3BsYW5lc190cmFuc211dGVkCmBgYAo=